package edu.exp3.app;

import edu.exp3.model.*;

public class Main {
    public static void main(String[] args) {
        // 1) 创建教师（子类构造 → super()）
        Teacher t1 = new Teacher("T001", "张老师", Gender.MALE);
        Teacher t2 = new Teacher("T002", "王老师", Gender.FEMALE);

        // 2) 教师开课（由教师侧创建课程并登记）
        Course java = t1.openCourse("C001", "Java程序设计", "教101", "周四 8:00-9:40", 2.0, 2);
        Course math = t2.openCourse("C002", "高等数学", "教102", "周三 8:00-9:40", 4.0, 80);

        // 3) 创建学生
        Student s1 = new Student("S001", "张三", Gender.MALE);
        Student s2 = new Student("S002", "李四", Gender.MALE);
        Student s3 = new Student("S003", "王五", Gender.FEMALE);

        // 4) 学生选课 —— 同一门课可以被多名学生选择
        s1.selectCourse(java); // ok
        s2.selectCourse(java); // ok（容量2）
        s3.selectCourse(java); // 容量满 → 失败
        s3.selectCourse(math); // 选上另一门

        // 5) 打印工作单/课表（父类抽象方法 → 子类各自实现）
        t1.printWorkSheet();
        t2.printWorkSheet();
        s1.printWorkSheet();
        s2.printWorkSheet();
        s3.printWorkSheet();

        // 6) 退课后再试
        s2.dropCourse(java);
        s3.selectCourse(java); // 现在可以选上
        s3.printWorkSheet();

        // ===== 权限/可见性验证（请保留注释，报告里说明原因） =====
        // System.out.println(s1.baseInfo()); // ❌ 报错示例：protected 方法，Main(跨包非子类)不可见
        // System.out.println(java.capacity); // ❌ 报错示例：private 字段，类外不可见
        // 只能通过公开访问器：
        System.out.println("课程容量：" + java.getCapacity());
    }
}
